---
id: 5ea2815a8640bcc6cb7dab3c
title: Числа Лішрел
challengeType: 1
forumTopicId: 385287
dashedName: lychrel-numbers
---

# --description--

<ol>
  <li>Візьміть ціле число <code>n₀</code> більше за нуль.</li>
  <li>Утворіть наступне число <code>n</code>, обернувши <code>n₀</code> та додавши його до <code>n₀</code></li>
  <li>Зупиніться, коли <code>n</code> стане паліндромом (тобто цифри числа <code>n</code> у зворотному порядку == <code>n</code>).</li>
</ol>

Якщо рекурентне співвідношення вище застосувати до більшості початкових чисел `n` = 1, 2, ..., то паліндром утвориться досить швидко.

Наприклад, якщо `n₀` = 12, ми отримаємо:

```bash
12
12 + 21 = 33,  a palindrome!
```

А якщо `n₀` = 55, ми отримаємо:

```bash
55
55 + 55 = 110
110 + 011 = 121,  a palindrome!
```

Зверніть увагу, що перевірка паліндрому відбувається *після* додавання.

Деякі початкові числа, схоже, продовжуються вічно. Рекурентне співвідношення для числа 196 було обчислено мільйони разів, формуючи числа з мільйонами цифр, так і не утворивши паліндром. Числа, які не утворюють паліндром, називають **числами Лішрел**.

Числом Лішрел в цьому завданні є будь-яке початкове число, яке не утворює паліндром протягом 500 (або більше) ітерацій.

**Початкові та відносні числа Лішрел:**

Будь-яке ціле число в послідовності чисел Лішрел також є числом Лішрел.

Загалом будь-яка послідовність з одного числа Лішрел *може* збігатися з іншою, щоб приєднатися до послідовності з попереднього кандидата на число Лішрел. Наприклад, послідовності для чисел 196 та 689 починаються так:

```bash
    196
    196 + 691 = 887
    887 + 788 = 1675
    1675 + 5761 = 7436
    7436 + 6347 = 13783
    13783 + 38731 = 52514
    52514 + 41525 = 94039
    ...
    689
    689 + 986 = 1675
    1675 + 5761 = 7436
    ...
```

Як бачимо, послідовність, яка починається зі 689, збігається і продовжується з такими ж числами, як і 196.

З цієї причини числа Лішрел можна поділити на справжні **початкові** кандидати на число Лішрел та **відносні** числа, які не утворюють паліндром, але мають цілі числа у своїй послідовності, які розглядаються як частина послідовності, утвореної з меншого числа Лішрел.

# --instructions--

Напишіть функцію, яка приймає число як параметр. Поверніть true, якщо число є числом Лішрел. Якщо ні — поверніть false. Пам’ятайте, що кількість ітерацій не може перевищувати 500.

# --hints--

`isLychrel` має бути функцією.

```js
assert(typeof isLychrel === 'function');
```

`isLychrel(12)` має повернути булеве значення.

```js
assert(typeof isLychrel(12) === 'boolean');
```

`isLychrel(12)` має повернути `false`.

```js
assert.equal(isLychrel(12), false);
```

`isLychrel(55)` має повернути `false`.

```js
assert.equal(isLychrel(55), false);
```

`isLychrel(196)` має повернути `true`.

```js
assert.equal(isLychrel(196), true);
```

`isLychrel(879)` має повернути `true`.

```js
assert.equal(isLychrel(879), true);
```

`isLychrel(44987)` має повернути `false`.

```js
assert.equal(isLychrel(44987), false);
```

`isLychrel(7059)` має повернути `true`.

```js
assert.equal(isLychrel(7059), true);
```

# --seed--

## --seed-contents--

```js
function isLychrel(n) {

}
```

# --solutions--

```js
function isLychrel(n) {
  function reverse(num) {
    return parseInt(
      num
        .toString()
        .split('')
        .reverse()
        .join('')
    );
  }

  var i;
  for (i = 0; i < 500; i++) {
    n = n + reverse(n);
    if (n == reverse(n)) break;
  }

  return i == 500;
}
```
